home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2004 #9
/
Amiga Plus CD - 2004 - No. 09.iso
/
amigaplus
/
tools
/
dev_libs
/
feelin040718
/
feelin040718.readme
next >
Wrap
Text File
|
2004-08-03
|
22KB
|
453 lines
Short: 20040718 NEW Object-oriented System & GUI
Uploader: gofromiel@numericable.fr
Author: Olivier LAVIALE - gofromiel@numericable.fr
Type: dev/gui
After an Intuition comes a Feelin.
-- FEELIN -------------------------------------------------------------------
Feelin is a new object-oriented system (OOS) with an object-oriented
GUI (OOG). The OOG is only one of the many applicability of Feelin.
Feelin as been written from scratch with a simple goal: be the smallest
(the core library is only 23 ko !!), the fastest, the securest
(crash-free object invokation, bullet-proof memory management) and the
more open object-oriented system on Amiga. IMHO, I think I've succeed
:-)
Feelin features its very own object and class handling, its very own
bullet-proof memory management system, and many new concepts such as
Dynamic IDs, preferences, servers, bugs loggin, crash-free object
invokation... My goal, creating Feelin, was to offer a free, simple
(yet powerful) and secure OOS that can evolves on its own.
Feelin is completely expandable by adding external libraries or
writting custom classes within your programs. Anybody can add features
(classes) to Feelin without asking me for a registration number or
anything like that. Using Dynamic IDs was a significant step in that
direction, and I do my best to keep Feelin very Dynamic. For example,
only very low-level classes are built into the library, all classes are
external and loaded on the fly when needed. Plus, I don't use hidden
features or structures, all classes are opaque. Anyone can rewrite any
class, there won't be any problem.
Feelin is also a complete and independant system to create and maintain
graphical user interfaces. The GUI part is similar to MUI, but does not
use BOOPSI, GadTools, not even intuition gadgets. All classes were
written from scratch. As MUI, every pixel of the application is
configurable (even windows look and color scheme)...
-- EXAMPLES -----------------------------------------------------------------
Examples are written in C and E. Executable are also supplied. Examples
are mainly used for testing. But there are also some tutorials on how
to write custom classes and so.
Class sources included in this release
--------------------------------------
* FC_Dataspace: This is a system example. Datatype objects are used to
store all kinds of data. Simple but efficient.
* FC_Bar, FC_Gauge: These are subclasses of FC_Area, they are basic GUI
elements.
* FC_Text: A simple GUI element, but shows how to use the
FC_TextDisplay support class.
* FC_PreviewColor, FC_PopColor and FC_AdjustColor: These classes are
used to display a color, pop a window to adjust the color, and adjust
the color. These classes are the basis of the Preview/Pop/Adjust trio,
which includes Frames, ColorScheme, Image... They also show how tu use
the automatic localization support of F_CreateClassA().
* FC_Decorator and FC_Shade: FC_Decorator is a simple class showing how
to write a preference object. FC_Shade is a rather complex class used
to decorate windows (used instead of Intuition window's border).
-- HISTORY ------------------------------------------------------------------
CHANGES SINCE RELEASE 030513 - SHORT
FC_Object and FC_Notify merged. FC_Object local data is now opaque. All
subclasses have been modified, especialy FC_Area because it was now
impossible to use macros to 'peek' values. FC_Area subclasses must use
the FA_AreaData attribute to obtain the public part of the FC_Area
local object data. FC_Area is finaly free from FC_Object. Both classes
can evolve freely.
FC_FrameDisplay and FC_ImageDisplay are now both using string as
specification. More over, two specification can be defined in a single
string by separating them with a comma. Thus, FA_AltFrame, FA_AltBack,
FA_Image_Render and FA_Image_Select are now obsolete. Using strings was
a significant step forward, preferences definitions are now must more
easy, and leave space for further changes and enhancement.
The preference editor is finaly a beautiful reality :-) Many classes
have been created for the occasion, and many improvements have been
made to the whole system. The new classes born with the preference
editor are : FC_AdjustColor, FC_AdjustFrame, FC_AdjustImage,
FC_AdjustScheme, FC_AdjustSpacing, FC_PopColor, FC_PopFrame,
FC_PopImage, FC_PopScheme, FC_PreferenceGroup, FC_PreviewColor,
FC_PreviewFrame and FC_PreviewScheme.
Most classes have been update and feature a preference group.
The FCC_Query() function have been expanded to support the preference
system. The function can be queried to return a tag list to create a
general class, or a tag list to create a preference class, this class
will then be used to create a preference group object. Thus, a class
can define both an object, and a preference group to customize this
object.
FC_TextDisplay has been completely rewritten. Text is now formated
using HTML markups. Text can be formated like HTML pages. Yet, few
commands are implemented. <i>, <b>, <u> can be used to change the style
of the font to, respectively, italic, bold and undelined. Text can be
aligned to the left, to the right, centered or even justified with the
command <align>. The command <font> can be used to change the font's
face, font's colour and font's size. The command <br> can be used to
break lines (as well as the common \n). An customizable horizontal rule
can be used to divided parts of a text with the command <hr>. Images
can also be incorporated within the text with the command <img>...
CHANGES SINCE RELEASE 030513 - COMPLETE
-- FC_Object (03.00) --------------------------------------------------
Class has been rewritten. FC_Notify is now included in the class. The
LocalObjectData is now opaque. The struct FeelinNode, formaly used to
link objects in a FeelinList, has been removed. Sub-classes must
implement their own linking system, which can have any form.
The FM_AddMember and FM_RemMember methods are no longer synonymus of
FM_Family_AddTail and FM_Family_Remove. They are now generic methods
defined by FC_Object (instead of FC_Family). They can be used to add or
remove object to or from a parent even if he doesn't use a FC_Family
object. The linking implementation is now totaly free (this is the case
of the FC_Group v8.00).
More over FM_AddMember now replaces FM_Family_AddHead,
FM_Family_AddTail and FM_Family_Insert, thanks to a little extension:
F_Do(Obj,FM_AddMember,new,FV_AddMember_Head);
F_Do(Obj,FM_AddMember,new,FV_AddMember_Tail);
F_Do(Obj,FM_AddMember,new,FV_AddMember_Insert,prev);
-- FC_Family (03.00) --------------------------------------------------
Completely rewritten. Supports FM_AddMember and FM_RemMember of
FC_Object v3.00
Objects are no longer linked by FC_Family, instead they are referenced
in linked nodes. Thus, any type of object can now be added to the
family.
-- FC_Application (08.00) ---------------------------------------------
Nest count for the attribute FA_Application_Sleep. The application is
only opened when the counter is equal to zero. Both TRUE and FALSE
value are nested (the counter is a LONG), thus, starting from zero, if
the attribute has been set to FALSE twice it must be set to TRUE three
time for the application to sleep (zero = application awake).
It is sometime difficult to know the state of the application,
especially when you push method (FM_Application_Sleep) and you need to
wait for the application to really be put to sleep. The
FA_Application_State attribute has been created for this purpose.
Currently only two states are defined FV_Application_Sleep and
FV_Application_Awake. [???] In the future the returned value will be a
pattern of 16 bits plus a word describing the last important state.
Added preference support
Preferences are only loaded at the begining of the FM_Application_Run
method. Update of the preferences takes place when the application if
awake, the preferences are not update (FM_Preference_Read), they are
read as is. This will be easier to update application this way, as the
preference object is already up to date and do not need anything more.
There was an very old bug in FM_Application_OpenFont. The fallbacks
were not really good, if font spec was FV_Font_Inherit and the parent
have no font, FV_Font_Inherit was used as a string, the font name to
open.
-- app.server (02.00) -------------------------------------------------
The server is no longer included in the FC_Application class to follow
new class rules.
Drag'n'Drop support
-- FC_Display (03.00) -------------------------------------------------
display.server has been removed. The design was terrible, and it was
useless anyway, because currently no screen can be created. I'll see
later for public screen management. Anyway the server must be separated
from the FC_Display (e.i. knowing nothing about internal management).
FC_Display handles all FC_DisplayContext methods : FM_CreateColor,
FM_DeleteColor, FM_CreateColorScheme and FM_DeleteColorScheme. The
FM_CreateColor method has been modified a little and requires a scheme
reference. This scheme is used as a reference to create the pen
(currently only used for "s:"). Color schemes can now be inherited,
just like fonts are backgrounds.
FC_DisplayContext is now obsolete.
To create a Display the FM_Display_Create method must be invoked on the
class using F_ClassDoA(). If a suitable display is found, the display
is shared. Otherwise, a new display is created (not functionnal yet).
To delete a Display the FM_Display_Delete method must be invoked on the
class using F_ClassDoA(). If the display is no longer used, the object
is disposed.
Only application should create and delete displays.
-- FC_Area (05.00) ----------------------------------------------------
FC_Area is now totaly independant from FC_Object, kludges are no longer
used to access area data. The FA_AreaData attribute must now be used to
get a pointer to a FAreaData structure holding public information.
FAreaData incorporates 'Parent', 'Next' and 'Prev' fields, a new way to
link FC_Area object was need.
Complete Drag'n'Drop (DnD) support.
When the FA_Selected attribute changes, new inner coordinates are
computed and the FM_Layout method is invoked on the object to update
its layout (usefull for FC_Group sub classes like FC_Cycle).
FA_SetMin & FA_SetMax are for subclasses use. These attributes
indicates wheter the object minimal and maximal with and height shall
be calculated to fit the object contents. They both have special values
e.g. FV_SetMin (TRUE) indicate that minimal dimensions shall be set on
FM_AskMinMax. FV_SetVMax indicate that only vertical maximum shall be
set. FV_NoSetMin clears FF_Area_SetHMin and FF_Area_SetVMin. The
attributes FA_FixedWidth, FA_FixedHeight and FA_Fixed are now obsolete,
as their flag representation FF_Area_FixedW and FF_Area_FixedH. The
attributes FA_SetMin and FA_SetMax must be used instead. FM_AskMinMax
have been updated.
Shortcuts are case insensitive now.
The font of the object can now be modified at any time, changes will
occurs dynamically, thanks to the new FM_RethinkLayout.
-- FC_Group (08.00) ---------------------------------------------------
Preference editor support. Support new FC_Area handling (FA_AreaData)
for itself and its children.
Methods applyed on the object are no longer applyed to the children.
This is unusual for a group but methods handling is too obscure because
I must know which method must be forwarded or not to children. If a
method must also be applied to children use the method
FM_Group_Forward.
This method should be used to apply a method on a FC_Group object AND
its children. The method uses the new FF_AREA_GROUP flag to distinguish
groups from other objects. If the object is a group the method
FM_Group_Forward is sent, otherwise the method to forward is sent
instead.
The 2D minmax calculation was a bit buggy, when calculating the height
of the rows, only the first rows was processed (each row was equal to
the first one).
-- FC_FrameDisplay (03.00) --------------------------------------------
Frame specifications are now strings (like ImageDisplay). This will
leave space for future expansion (external code...). FA_AltFrame is now
deprecated, if you want to use alternate image you MUST use a string
spec.
0:xx.blbtbrbb // One frame
0:xx.blbtbrbb,yy.blbtbrbb // Two frame
Frames organisation (numbering) changed. 7 frames added.
-- FC_ImageDisplay (03.00) --------------------------------------------
Is now a subclass of FC_Object and uses static IDs.
FC_ImageDisplay uses the same mecanism as FC_FrameDisplay to create
images (simple or double). Numeric values like FI_Shine are still
supported, but only to create simple images. If you want to create a
double image you must use a string and seperate each image
specification with a comma :
FI_Shine >>> color scheme Shine
"s:1" >>> Same as above
"s:1,c:FF0000" >>> Same as above, full red as selected
FA_ImageDisplay_Spec replaces both FA_ImageDisplay_Render and
FA_ImageDisplay_Select, which are now obsolete.
The image can now be modified at any time, you no longer need to
dispose and create another object if you want to modify the image,
everything is handled internally (the object keeps a reference of the
FC_Render object for this magic to happen).
Support intuition pens again.
-- FC_PopHelp (02.00) -------------------------------------------------
Bubble's arrow can be on any corner of the bubble, depending bubble's
position in the screen (mouse's position actually). Thus, bubble's
arrow is less disabled, only when really needed.
Bubble's shadow has been removed from now because I need more tools to
create the shadow (maybe blits...)...
The drawing of the bubble is simpler now. I don't use graphic.library
functions to draw the corners and the arrow, but arrays of chunky CLUT,
rendered with bubble's scheme, saving a lot of code and work.
-- FC_Preference (02.00) ----------------------------------------------
The global object is not included in the ClassUserData. This is a fake
object, not created by the class but similar.
Handling of preference names. Each application can now have its very
own preference file.
The method FM_Preference_Read can now read a file defined by a name or
resolve values FV_Preference_ENV or FV_Preference_ENVARC.
FM_Preference_Write follow the same rules but can also write both ENV a
ENVARC width the special value FV_Preference_BOTH.
-- FC_PreferenceEditor (02.00) ----------------------------------------
PreferenceGroup list is built on class init. This avoid each instance
to build a new list or to check a previous list. A "fast access list"
is also created in "ENV:Feelin/CLS_PREFERENCEEDITOR_FASTLIST" with all
classes successfully opened. If the list is exists it is read instead
of checking every single library.
All preference work is done on the application's preference object or
on the global preference object if the attribute
FA_PreferenceEditor_Global is TRUE. Modifications are saved with the
FM_PE_Save method or used with the FM_PE_Use method. If the
FM_PE_Cancel method is invoked on the object (either by closing the
window or by pressing the cancel gadget) preferences are read back from
ENV: and set directly into the preference object.
This behaviour involve very few dos notification, because almost
everything is handled internally.
This version is finally kickin'. Instead of showing/hidding groups I
add/remove them dynamically it is absolutely faster. I also use the new
methods FM_Group_InitChange and FM_Group_ExitChange. They do little
things actually... but it works ;-)
-- FC_Render (02.00) --------------------------------------------------
The clipping system has been totaly rewritten. Clippings were relative
to the object e.i. clipping knowledge was restricted to objects, which
is quiet stupid.
Now, clipping are relative to the layer where they are installed. Each
clip region installed (struct FeelinTraceClip) is linked to a layer
node (stuct FeelinTraceLayer), which is linked to the CUD. Clip regions
installed on a layer are all linked to the same list. Thus, different
FC_Render objects can install and remove clip region without conflict.
-- FC_Shade (03.10) ---------------------------------------------------
All gadgets rendering are now buffered (if possible), and not only the
title bar. The FC_TextDisplay object used by the title bar is no longer
created on the fly when the title bar need to be drawn, but create on
FM_Setup. The preparse string are now resolved with preference items
"FP_Decorator_PreParse" & "FP_Decorator_AltPreParse".
-- FC_TextDisplay (04.00) ---------------------------------------------
The class has been completely rewritten. Text is now formated using
HTML markups.
Text can be formated like HTML pages. Yet, few commands are
implemented. <i>, <b>, <u> can be used to change the style of the font
to, respectively, italic, bold and undelined. Text can be aligned to
the left, to the right, centered or even justified with the command
<align>. The command <font> can be used to change the font's face,
font's colour and font's size. The command <br> can be used to break
lines (as well as the common \n). An customizable horizontal rule can
be used to divided parts of a text with the command <hr>. Images can
also be incorporated within the text with the command <img>.
In addition to standard HTML commands, some command have been added to
allow further customization of the text aspect. The command <pens>
allows management of 4 additionnal pens used to produce effects such as
emboss, ghost, glow... The command <spacing> can be used to modify the
spacing (in pixels) between two or several lines.
-- FC_Window (08.00) --------------------------------------------------
Added preference support with localization.
Internal attributes handling totaly rewritten, especially gadgets and
system attributes (FA_Window_Active...). The code is cleaner and
shorter. The LocalObjectData is also smaller. I've finally get rid of
the embended struct NewWindow.
FA_Window_Open is a wish (reflected by FF_WINDOW_SYS_OPENREQUEST). The
attribute can be set to TRUE on object's creation time without really
opening the window, but the wish is recorder. The window is opened as
soon as possible by the application (or the object itself if
requirements are met). To know if a window is currently opened use the
FA_Window attribute, it returns a pointer to the intuition window of
the object.
Zoom and Size gadgets cannot be requested. These gadgets only appear if
a window can be resized. The FA_Window_Resizable attribute can be used
by decorators to know if a window can be rezised (to create zoom and
size gadgets). The flag FF_WINDOW_SYS_RESIZABLE is set when a window is
resizabel, cleared otherwise.
The FM_BuildContextHelp method is also sent to the decorator now.
-- DOSNotify (02.00) --------------------------------------------------
Instead of using an external server (DOSNotifyServer), the class create
a thread (process) that is highly more convenient, everything stays
internal.
-- NEW CLASSES --------------------------------------------------------
FC_Cycle, FC_Radio, FC_Scale.
-- LAST WORDS ---------------------------------------------------------------
This was big work for me little programmer. I hope you'll like it and
wanna join me. I hope some comments. Thanks again and never forget :
Don't be tempted by the shinny appel
Don't you eat of a bitter fruit
Hunger only for a word of justice
Hunger only for a word of truth
'Cause all that you have is your sool